//////////////////////////////////////////////////////////////////////////

#ifndef _CONNECTION_H_
#include "connection.h"
#endif

//////////////////////////////////////////////////////////////////////////

#ifndef _CONNECTIONIMPL_H_
#include "connectionimpl.h"
#endif

#include <iostream>

//////////////////////////////////////////////////////////////////////////


Connection::Connection()
: m_Impl(NULL)
{
    m_Impl = ConnectionImpl::GetBoostConnectionImpl();

    AddEventToObserve( Observer::NETWORK_ACCEPTED_NEW_CONNECTION );
    AddEventToObserve( Observer::NETWORK_RECEIVE_COMPLETE );
    AddEventToObserve( Observer::NETWORK_SEND_COMPLETE );

    m_Impl->AddObserver(this);
}


//////////////////////////////////////////////////////////////////////////


Connection::~Connection()
{
    if (m_Impl)
        delete m_Impl;
}


//////////////////////////////////////////////////////////////////////////


void Connection::SendTCP( const Packet& _packet )
{
    m_Impl->SendTCP(_packet);
}


//////////////////////////////////////////////////////////////////////////


void Connection::SendUDP( const Packet& _packet )
{
    m_Impl->SendUDP(_packet);
}


//////////////////////////////////////////////////////////////////////////


const Packet& Connection::GetRecvPacketTCP() const
{
    return m_Impl->GetRecvPacketTCP();
}


//////////////////////////////////////////////////////////////////////////


const Packet& Connection::GetRecvPacketUDP() const
{
    return m_Impl->GetRecvPacketUDP();
}


//////////////////////////////////////////////////////////////////////////


void Connection::Connect( const char* _address)
{
    m_Impl->Connect(_address);
}


//////////////////////////////////////////////////////////////////////////


void Connection::Accept()
{
    m_Impl->Accept();
}


//////////////////////////////////////////////////////////////////////////


void Connection::Close()
{
    m_Impl->Close();
}


//////////////////////////////////////////////////////////////////////////


void Connection::OnEvent( Event _event, Observable* _observable )
{
    // Redirect
    NotifyObservers(_event);
}



//////////////////////////////////////////////////////////////////////////
